home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The CICA Windows Explosion!
/
The CICA Windows Explosion! - Disc 2.iso
/
programr
/
wtj009.zip
/
VBMEM.ZIP
/
MEMHUGE.TXT
< prev
Wrap
Text File
|
1992-08-06
|
5KB
|
194 lines
Rem THE VB MEMORY LANE by Costas Kitsos
DefInt A-Z
Dim AHINCR As Integer
Sub Form_Load ()
AHINCR = GetProcAddress(GetModuleHandle("KERNEL"), "__AHINCR") And &HFFFF&
End Sub
Sub Mnu_LongInteger_Click ()
Cls
Dim MemHandle As Integer, wSize As Integer
Dim lpAddress As Long, dwData As Long
Dim dwIndex As Long, dwBytes As Long
Const Max = 70000
' Demo a 70,000 element Array of Long Integers
wSize = Len(dwData) ' wSize equals the size of a long Integer (4 bytes)
MemHandle = GlobalAlloc(GHND, Max * wSize)
If MemHandle = 0 Then Exit Sub ' If our request failed then exit
Print "Allocated"; Max * wSize; " bytes"
Print
lpAddress = GlobalLock(MemHandle) ' get a pointer to the memory block
Print "Writing Data to" + Str$(Max) + " Element Array of Long Integers"
Print
wSel = lpAddress \ &H10000 ' calculate the Selector portion of the Address
For dwData = 0 To Max - 1 Step 100 ' write some data
dwBytes = dwData * wSize
Call hmemcpy(ByVal (((wSel + (((dwBytes \ &H10000) * AHINCR))) * &H10000) + (dwBytes And &HFFFF&)), dwData, wSize)
Next
dwIndex = 60000
Print "Reading Data from element:", dwIndex
dwBytes = dwIndex * wSize
Call hmemcpy(dwData, ByVal (((wSel + (((dwBytes \ &H10000) * AHINCR))) * &H10000) + (dwBytes And &HFFFF&)), wSize)
Print "Data in Element"; dwIndex; " = ", dwData
Print
Print "Freeing Memory"
Ok = GlobalUnlock(MemHandle)
Ok = GlobalFree(MemHandle)
Print "Done"
End Sub
Sub Mnu_UserType_Click ()
Cls
' Demo a User Defined Type array of 2,000 elements
Dim StoreRec As VideoType
RecordsSize& = 2000 * Len(StoreRec) ' 256,000 bytes
MemHandle = GlobalAlloc(GHND, RecordsSize&)
If MemHandle = 0 Then Exit Sub ' If our request failed then exit
Print "Allocated "; RecordsSize&; " bytes"
Print
wSel = GlobalHandleToSel(MemHandle) ' get a selector
' some data to write
StoreRec.Index = 8731
StoreRec.Title = "Silence of the Lambs"
StoreRec.Length = 90
StoreRec.IsRented = 1
StoreRec.Customer = "Gus Tomer"
StoreRec.CustomerNo = 33
dwOffset& = 1999 * Len(StoreRec)
dwcb& = Len(StoreRec)
Bytes& = MemoryWrite(wSel, dwOffset&, StoreRec, dwcb&)
Print "Wrote:"; Bytes&; " bytes at Index 1999": Print
' Ready to read it back now.
' erase the record to prove that it worked.
StoreRec.Index = 0
StoreRec.Title = ""
StoreRec.Length = 0
StoreRec.IsRented = 0
StoreRec.Customer = ""
StoreRec.CustomerNo = 0
' read the record
Bytes& = MemoryRead(wSel, dwOffset&, StoreRec, dwcb&)
Print "Read:"; Bytes&; " bytes at index 1999": Print
Print "StoreRec.Index = "; StoreRec.Index
Print "StoreRec.Title = "; StoreRec.Title
Print "StoreRec.Length = "; StoreRec.Length
Print "StoreRec.IsRented = "; StoreRec.IsRented
Print "StoreRec.Customer = "; StoreRec.Customer
Print "StoreRec.CustomerNo = "; StoreRec.CustomerNo
Print
Ok = GlobalFree(MemHandle)
Print "Done"
End Sub
Sub Mnu_TimeTest_Click ()
Cls
Dim MemHandle As Integer, wSize As Integer
Dim lpAddress As Long, dwIndex As Long
Dim dwData As Long, dwBytes As Long
Const Max = 100000
' Demo a 100,000 element Array of Long Integers
wSize = Len(dwData) ' wSize equals the size of a long integer (4 bytes)
MemHandle = GlobalAlloc(GHND, (Max * wSize))
If MemHandle = 0 Then Exit Sub ' If our request failed then exit
Print "Allocated"; Max * wSize; " bytes"
Print
lpAddress = GlobalLock(MemHandle) ' get a pointer to the memory block
Print "Writing Data with hmemcpy to" + Str$(Max) + " Element Array of Long Integers"
StartTime& = GetTickCount()
wSel = lpAddress \ &H10000 ' calculate the Selector portion of the Address
For dwData = 0 To Max - 1 Step 50
dwBytes = dwData * wSize
Call hmemcpy(ByVal (((wSel + (((dwBytes \ &H10000) * AHINCR))) * &H10000) + (dwBytes And &HFFFF&)), dwData, wSize)
Next
EndTime& = GetTickCount()
Print "hmemcpy Time = "; Str$(EndTime& - StartTime&); " milliseconds"
Print
Print "Writing Data with ToolHelp to" + Str$(Max) + " Element Array of Long Integers"
wSel = GlobalHandleToSel(MemHandle)
StartTime& = GetTickCount()
For dwData = 0 To Max - 1 Step 50
dwBytes = MemoryWrite(wSel, wSize * dwData, dwData, wSize)
Next
EndTime& = GetTickCount()
Print "ToolHelp Time = "; Str$(EndTime& - StartTime&); " milliseconds"
Ok% = GlobalUnlock(MemHandle)
Ok% = GlobalFree(MemHandle)
Print
Print "Done"
End Sub